#!/bin/bash - 

# 定义变量ARG_B
ARG_B=0

# 使用getopt命令来处理脚本的命令行选项和参数，再将处理后的结果重新赋值给位置参数
#+ eval命令用于将其后的内容作为单个命令读取和执行，这里用于处理getopt命令生成的参数的转义字符
eval set -- `getopt -o a::bc: --long arga::,argb,argc: -n 'getopt_longopt.sh' -- "$@"`

# 执行while循环
while true
do
  case "$1" in
    -a|--arga)
      case "$2" in
        "")
		 # 当没有给具有可选参数的选项-a（或--arga）指定参数时，使用默认值赋值给变量ARG_A
          ARG_A='default value'
          shift
          ;;
        *)
		 # 当给具有可选参数的选项-a（或--arga）指定了参数时，使用指定的参数赋值给变量ARG_A
          ARG_A=$2
          shift
          ;;
        esac
        ;;
-b|--argb)
  # 如果指定了选项-b（或--argb），则将变量ARG_B赋值为1
      ARG_B=1
      ;;
    -c|--argc)
      case "$2" in
        "")
          # 如果为-c（或--argc）选项没有指定参数，则跳过
          shift
          ;;
        *)
          # 如果为-c（或--argc）选项指定了参数，则将指定的参数赋值给变量ARG_2
          ARG_C=$2
          shift
          ;;
      esac
      ;;
--)
  # 若为双连字符（--）则退出while循环，表示选项的结束
      shift
      break
      ;;
*)
  # 若为其它选项，则显示错误信息，并退出脚本的执行
      echo "Internal error!"
      exit 1
      ;;
  esac

  shift

done

# 打印变量ARG_A、ARG_B、ARG_C的值
echo "ARG_A = $ARG_A"
echo "ARG_B = $ARG_B"
echo "ARG_C = $ARG_C"